Librerías y configuración inicial

library(tidyverse)
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0      ✔ purrr   1.0.1 
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.3.0      ✔ stringr 1.5.0 
✔ readr   2.1.3      ✔ forcats 0.5.2 
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(readxl)
library(officer)

Attaching package: 'officer'

The following object is masked from 'package:readxl':

    read_xlsx

Se configura el sistema en idioma español.

#Sys.setlocale("LC_ALL", "Spanish")
Sys.setlocale("LC_ALL", "es_ES.UTF-8")
[1] "es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/C/es_ES.UTF-8/en_US.UTF-8"

Carga de datos

datos <- read_excel("../data/mundial.xlsx")

Se observan los resultados.

glimpse(datos)
Rows: 1,006
Columns: 15
$ Pais                   <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region                 <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador                <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés…
$ Posicion               <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad                   <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados       <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial    <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados        <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90     <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles                  <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias            <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas              <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas                  <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto       <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…

Limpieza

Nombre de jugadores

Hay erroes en los nombres de los jugadores, por lo que se crean dos cadenas de caracteres, una con los caracteres incorrectos y otra con la sustitución correcta.

incorrecto <- c("Ã<81>", "é", "á", "ó", "Ã", "ñ", "óź", "í\u0081", "íº", "ź", "Å‚", "Å„", "¯", "í®", "í¢", "í¸", "í«", "í±", "¼", "Å«", "ć", "Å¡", "Ć", "ÄŒ", "§", "í‰", "£", "Ä™", "Ä…", "Å\u0081", "í“", "Å i", "Ä\u008d", "Ä\u0090", "Ž", "¦", "í¨", "í¤", "İ", "ÄŸ", "í´")
correcto   <- c("Á", "é", "á", "ó", "í", "ñ", "ó", "Á", "ú", "z", "l", "ń", "ï", "î", "â", "ø", "ë", "ñ", "z", "ū", "ć", "š", "Ć", "Č", "ç", "É", "ã", "ę", "ą", "Ł", "Ó", "Ši", "č", "Đ", "Ž", "æ", "e", "ä", "İ", "ğ", "ô")

Se crea una función en donde se reemplazan los caracteres incorrectos por los correctos.

replace_chars <- function(string, incorrect_chars, correct_chars) {
  replacements <- setNames(correct_chars, incorrect_chars)
  str_replace_all(string, replacements)
}

Se aplica la función.

datos$Jugador <- replace_chars(datos$Jugador, incorrecto, correcto)

Se observa el resultado.

datos$Jugador[0:100]
  [1] "Pervis Estupiñán"     "Carlos Gruezo"        "Moisés Caicedo"      
  [4] "Ángel Mena"           "Michael Estrada"      "Piero Hincapié"      
  [7] "Félix Torres Caicedo" "Alexander Domí­nguez" "Enner Valencia"      
 [10] "Ángelo Preciado"      "Robert Arboleda"      "Gonzalo Plata"       
 [13] "Byron Castillo"       "Xavier Arreaga"       "Alan Franco"         
 [16] "Hernán Galí­ndez"     "Jhegson Méndez"       "Ayrton Preciado"     
 [19] "Jeremy Sarmiento"     "Romario Ibarra"       "Moisés Ramí­rez"     
 [22] "Luis Fernando León"   "Joao Joshimar Rojas"  "Renato Ibarra"       
 [25] "Junior Sornoza"       "Pedro Perlaza"        "Fernando Gaibor"     
 [28] "Pedro Ortí­z"         "Jordy Caicedo"        "José Cifuentes"      
 [31] "Christian Cruz"       "Beder Caicedo"        "José Carabalí­"      
 [34] "Djorkaeff Reasco"     "José Hurtado"         "Erick Ferigra"       
 [37] "Adolfo Muñoz"         "Christian Noboa"      "Fidel Martí­nez"     
 [40] "Diego Palacios"       "Janner Corozo"        "Damián Dí­az"        
 [43] "Brayan Angulo"        "Romario Caicedo"      "Washington Corozo"   
 [46] "Michael Carcelen"     "Jhojan Julio"         "Juan Cazares"        
 [49] "Leonardo Campana"     "Memphis Depay"        "Frenkie de Jong"     
 [52] "Davy Klaassen"        "Daley Blind"          "Georginio Wijnaldum" 
 [55] "Denzel Dumfries"      "Steven Berghuis"      "Justin Bijlow"       
 [58] "Virgil van Dijk"      "Stefan de Vrij"       "Matthijs de Ligt"    
 [61] "Tim Krul"             "Owen Wijndal"         "Cody Gakpo"          
 [64] "Donyell Malen"        "Steven Bergwijn"      "Arnaut Groeneveld"   
 [67] "Luuk de Jong"         "Noa Lang"             "Guus Til"            
 [70] "Marten de Roon"       "Jasper Cillessen"     "Tyrell Malacia"      
 [73] "Jurrien Timber"       "Kenny Tete"           "Ryan Gravenberch"    
 [76] "Teun Koopmeiners"     "Wout Weghorst"        "Donny van de Beek"   
 [79] "Ryan Babel"           "Devyne Rensch"        "Calvin Stengs"       
 [82] "Patrick van Aanholt"  "Nathan Aké"           "Kalidou Koulibaly"   
 [85] "Ismaila Sarr"         "Idrissa Gana Gueye"   "Saliou Ciss"         
 [88] "Edouard Mendy"        "Sadio Mané"           "Bouna Sarr"          
 [91] "Cheikhou Kouyaté"     "Abdou Diallo"         "Boulaye Dia"         
 [94] "Famara Diedhiou"      "Pape Abou Cisse"      "Nampalys Mendy"      
 [97] "Krepin Diatta"        "Ibrahima Mbaye"       "Habib Diallo"        
[100] "Youssouf Sabaly"     

Se buscan las celdas que solo contengan un nombre del jugador, puesto que esto indicaría un error en la digitación del nombre (los nombres son compuestos por dos o más palabras).

La expresión regular indica:

  • ^: Inicio de la palabra
  • $: Final de la palabra
  • \w: Cualquier caracter (word)
  • +: una o más repeticiones
expresion_regular <- "^\\w+$"

Se utilza la función grepl(), “Generalized Regular Expression Pattern Matching” para filtrar los nombres de jugadores que contengan una sola palabra. Se guarda en un objeto llamado unicos.

unicos <- grepl(expresion_regular, datos$Jugador, perl = TRUE)

Se obtienen 29 casos.

datos$Jugador[unicos]
 [1] "Koke"        "Rodri"       "Pedri"       "Gavi"        "Bryan"      
 [6] "Rodrigo"     "Munir"       "Marquinhos"  "Danilo"      "Neymar"     
[11] "Casemiro"    "Alisson"     "Fred"        "Fabinho"     "Richarlison"
[16] "Ederson"     "Raphinha"    "Antony"      "Gerson"      "Emerson"    
[21] "Allan"       "Rodrygo"     "Martinelli"  "Felipe"      "Pedro"      
[26] "Hulk"        "Wakaso"      "Pepe"        "Vitinha"    

Se excluyen los 29 casos anteriores del data set. Se utiliza subset() y el operador ! para indicar que extraiga todos los casos diferentes a unicos (!unicos).

datos_limpios <- subset(datos, !unicos)

Los datos originales tienen 1006 filas, al realizar el proceso anterior, se obtiene un dataset con 977 filas.

length(datos$Jugador)
[1] 1006
length(datos_limpios$Jugador)
[1] 977

Se muestra un ejemplo del resultado.

glimpse(datos_limpios)
Rows: 977
Columns: 15
$ Pais                   <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region                 <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador                <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion               <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad                   <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados       <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial    <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados        <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90     <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles                  <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias            <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas              <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas                  <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto       <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…

Datos duplicados

Se revisa si hay datos duplicados en el nombre de los jugadores, se utiliza la función duplicated(). Dicha función da una vector con valores booleanos True o False, de modo que la función which indica cuáles de esos valores están duplicados. Así se genera un vector con los índices de los datos duplicados. En este caso, el vector tiene longitud 0, lo que indica que no hay nombres de jugadores duplicados.

duplicados <- duplicated(datos_limpios$Jugador)
indices_duplicados <- which(duplicados)
indices_duplicados
integer(0)

Los resultados indican que no hay datos duplicados en los nombres de los jugadores. Luego, se observa las categorías de las otras variables cualitativas, iniciando por la región. Se utiliza la función unique() para observar las categorías y la función table() para revisar las frecuencias y que cada categoría cuenta con casos.

unique(datos_limpios$Region)
[1] "CONMEBOL" "UEFA"     "CAF"      "AFC"      "CONCACAF"
table(datos$Region)

     AFC      CAF CONCACAF CONMEBOL     UEFA 
     140      153      118      168      427 

Se realiza lo mismo con la variable Posicion.

unique(datos_limpios$Posicion)
[1] "Defensa"     "Mediocentro" "Delantero"   "Portero"    
table(datos_limpios$Posicion)

    Defensa   Delantero Mediocentro     Portero 
        323         230         353          71 

Por último, inspecciona la variable Pais.

unique(datos_limpios$Pais)
 [1] "Ecuador"        "Netherlands"    "Senegal"        "England"       
 [5] "IR Iran"        "United States"  "Wales"          "Argentina"     
 [9] "Mexico"         "Poland"         "Australia"      "Denmark"       
[13] "France"         "Tunisia"        "Costa Rica"     "Germany"       
[17] "Japan"          "Spain"          "Belgium"        "Canada"        
[21] "Croatia"        "Morocco"        "Brazil"         "Cameroon"      
[25] "Serbia"         "Switzerland"    "Ghana"          "Korea Republic"
[29] "Portugal"       "Uruguay"       
table(datos_limpios$Pais)

     Argentina      Australia        Belgium         Brazil       Cameroon 
            38             16             35             23             31 
        Canada     Costa Rica        Croatia        Denmark        Ecuador 
            33             16             33             36             49 
       England         France        Germany          Ghana        IR Iran 
            34             31             33             35             40 
         Japan Korea Republic         Mexico        Morocco    Netherlands 
            45             39             31             28             34 
        Poland       Portugal        Senegal         Serbia          Spain 
            39             32             28             26             33 
   Switzerland        Tunisia  United States        Uruguay          Wales 
            29             29             38             39             24 

En todas las condiciones anteriores, hay datos válidos para cada una de las categorías.

Datos nulos

Se buscan datos nulos en cada una de las variables. En este caso, no se va a implementar métodos de imputación, simplemente se extraen dichos casos.

Se crea un ciclo for que itere sobre cada una de las columnas de los datos, de modo que utiliza la función is.na() para detectar los datos faltantes.

num_columnas <- ncol(datos_limpios) #Número de columnas
for (i in 1:num_columnas) {  #de 1 a n columnas
  valores_faltantes <- is.na(datos_limpios[, i]) #Guarda la cantidad de NA por cada columna
  cantidad_faltantes <- sum(valores_faltantes) #Suma todos los NA
  cat(colnames(datos_limpios)[i], ":", cantidad_faltantes, "\n") #Imprime el nombre de la columna y la cantidad de NA`s
}
Pais : 0 
Region : 0 
Jugador : 0 
Posicion : 0 
Edad : 0 
Partidos_Jugados : 0 
Partidos_11_inicial : 0 
Minutos_jugados : 0 
Minutos_jugados_90 : 0 
Goles : 0 
Asistencias : 0 
Amarillas : 0 
Rojas : 0 
Goles_por_minuto : 0 
Asistencias_por_minuto : 0 

Formato de los datos

Nótese que casi todas las variables están en el formato correcto, exceptuando a las variables que contienen números enteros.

glimpse(datos_limpios)
Rows: 977
Columns: 15
$ Pais                   <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region                 <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador                <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion               <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad                   <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados       <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial    <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados        <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90     <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles                  <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias            <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas              <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas                  <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto       <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…

Se utiliza la función apply() para iterar sobre las columnas que contienen valores enteros. Primero se crea un vector con los nombres de las variables y se guarda en un objeto llamado var_disc (variables discretas).

var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")

Para hacer un slicing se adjunta el vector a un parántesis cuadrado del data set, así se obtiene una subselección de los datos.

datos_limpios[var_disc]
# A tibble: 977 × 8
    Edad Partidos_Jugados Partidos_11_inic…¹ Minut…² Goles Asist…³ Amari…⁴ Rojas
   <dbl>            <dbl>              <dbl>   <dbl> <dbl>   <dbl>   <dbl> <dbl>
 1    24               17                 17    1513     2       1       2     0
 2    26               16                 16    1395     1       0       2     0
 3    20               15                 15    1305     2       4       5     0
 4    34               15                 13    1079     2       3       2     0
 5    25               17                 11    1043     6       2       2     0
 6    20               11                 11     990     1       0       1     0
 7    25               11                 11     990     2       0       2     0
 8    34               10                 10     824     0       0       2     1
 9    32               12                 10     758     4       1       5     0
10    23               13                  8     755     0       0       1     0
# … with 967 more rows, and abbreviated variable names ¹​Partidos_11_inicial,
#   ²​Minutos_jugados, ³​Asistencias, ⁴​Amarillas

Luego, se le aplica la función as.interger() para convertir los datos en formato de número entero, se utiliza como argunmento dentro de apply().

datos_limpios[var_disc] <- as.data.frame(apply(datos_limpios[var_disc], 2, as.integer)) #El 2 indica que se aplique a cada columna en lugar de cada fila

Nótese que ahora variables como Goles se encuentran etiquetadas como int, mientras que variables continuas como Goles por minuto se encuentran categorizadas como dbl.

glimpse(datos_limpios)
Rows: 977
Columns: 15
$ Pais                   <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region                 <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador                <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion               <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad                   <int> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados       <int> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial    <int> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados        <int> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90     <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles                  <int> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias            <int> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas              <int> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas                  <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto       <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…

Tablas

Tablas de Frecuencias

Para hacer un mejor manejo de las variables se crean vectores que agrupan las columnas por su tipo de medición, a saber, variables cualitativas, variables cuantitativas discretas, variables cuantitativas de razón o continua. Estos vectores se utilizarán dependiendo del caso.

var_cual <- c("Pais", "Region", "Posicion") #Se extrae la variable jugador debido a que no se puede utilizar agrupaciones en la misma

var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")

var_cont <- c("Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")

var_cuant <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas","Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")

Se crea un ciclo for para genera cada una de las tablas y crear un objeto con el respectivo nombre de la columna. Se utiliza la función assign() para crear dichos objetos.

for (columna in var_cual) {
  
  tabla_frecuencias <- table(datos_limpios[[columna]]) #Se crea una tabla de frecuencias por cada variable
  
  tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE) # Se crea la fila del total general al final
  
  tabla_frecuencias <- as.data.frame(tabla_frecuencias) #Se convierte en data frame
  
  colnames(tabla_frecuencias) <- c(columna, "Frecuencia") #Se indica el nombre de las columnas
  
  assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
  
  
}

Se observan los resultados.

tabla_Pais
             Pais Frecuencia
1       Argentina         38
2       Australia         16
3         Belgium         35
4          Brazil         23
5        Cameroon         31
6          Canada         33
7      Costa Rica         16
8         Croatia         33
9         Denmark         36
10        Ecuador         49
11        England         34
12         France         31
13        Germany         33
14          Ghana         35
15        IR Iran         40
16          Japan         45
17 Korea Republic         39
18         Mexico         31
19        Morocco         28
20    Netherlands         34
21         Poland         39
22       Portugal         32
23        Senegal         28
24         Serbia         26
25          Spain         33
26    Switzerland         29
27        Tunisia         29
28  United States         38
29        Uruguay         39
30          Wales         24
31  Total General        977
tabla_Posicion
       Posicion Frecuencia
1       Defensa        323
2     Delantero        230
3   Mediocentro        353
4       Portero         71
5 Total General        977
tabla_Region
         Region Frecuencia
1           AFC        140
2           CAF        151
3      CONCACAF        118
4      CONMEBOL        149
5          UEFA        419
6 Total General        977

Por último, se guradan las tablas de frecuencias en un documento de Word, para ello se vuelve a correr el ciclo for, pero se le incluye el código para guardarlo.

doc_tablas <- read_docx() #Se crea el documento  Word
for (columna in var_cual) {
  
  tabla_frecuencias <- table(datos_limpios[[columna]])
  
  tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE)
  
  tabla_frecuencias <- as.data.frame(tabla_frecuencias)
  
  colnames(tabla_frecuencias) <- c(columna, "Frecuencia")
  
  assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
  
  #Se guarda en un Word
  
  doc_tablas <- doc_tablas %>%
    body_add_par(columna, style ="heading 1") %>% #Se agrega el título
    body_add_par("") %>% # Se agrega un enter
    body_add_table(value = tabla_frecuencias, 
                   align_table = "center", 
                   style = "table_template") %>% #Se agrega la tabla
    body_add_break(pos = "after") #Se agrega salto de página

}

Se guarda el documento en la caperta docs.

print(doc_tablas, target = "../docs/frecuencias.docx")

Tablas cruzadas

Se crean las tablas cruzadas con la función table().

region_posicion <- table(datos_limpios$Region, datos_limpios$Posicion)
region_posicion
          
           Defensa Delantero Mediocentro Portero
  AFC           50        27          55       8
  CAF           50        36          55      10
  CONCACAF      43        30          38       7
  CONMEBOL      47        30          59      13
  UEFA         133       107         146      33
pais_posicion <- table(datos_limpios$Pais, datos_limpios$Posicion)
pais_posicion
                
                 Defensa Delantero Mediocentro Portero
  Argentina           11         9          13       5
  Australia            6         3           5       2
  Belgium              7        13          12       3
  Brazil               9         5           8       1
  Cameroon            11         9           9       2
  Canada              11         6          13       3
  Costa Rica           7         4           4       1
  Croatia             11         6          13       3
  Denmark             10        12          13       1
  Ecuador             16         9          20       4
  England             10         9          11       4
  France              11         7          12       1
  Germany             10         8          12       3
  Ghana                9         8          15       3
  IR Iran             14         7          17       2
  Japan               17         7          19       2
  Korea Republic      13        10          14       2
  Mexico              12         8          10       1
  Morocco             11         7           9       1
  Netherlands         12        11           7       4
  Poland              14         5          16       4
  Portugal            10         8          11       3
  Senegal             10         5          11       2
  Serbia               7         4          13       2
  Spain               14        11           6       2
  Switzerland          8         6          14       1
  Tunisia              9         7          11       2
  United States       13        12          11       2
  Uruguay             11         7          18       3
  Wales                9         7           6       2

Se añaden las columnas y filas de totales generales

region_posicion_cruzada <- cbind(region_posicion, "Total General" = rowSums(region_posicion)) #Se crea la columna de total general
region_posicion_cruzada <- addmargins(region_posicion, FUN = list("Total General" = sum), quiet = TRUE) #Se crea la fila de total general
region_posicion_cruzada <- as.data.frame.matrix(region_posicion_cruzada) #Se convierte la matriz en data frame
region_posicion_cruzada <- rownames_to_column(region_posicion_cruzada, "Region") #Se renombran las columnas
region_posicion_cruzada 
         Region Defensa Delantero Mediocentro Portero Total General
1           AFC      50        27          55       8           140
2           CAF      50        36          55      10           151
3      CONCACAF      43        30          38       7           118
4      CONMEBOL      47        30          59      13           149
5          UEFA     133       107         146      33           419
6 Total General     323       230         353      71           977
pais_posicion_cruzada <- cbind(pais_posicion, "Total General" = rowSums(pais_posicion))
pais_posicion_cruzada <- addmargins(pais_posicion, FUN = list("Total General" = sum), quiet = TRUE)
pais_posicion_cruzada <- as.data.frame.matrix(pais_posicion_cruzada)
pais_posicion_cruzada <- rownames_to_column(pais_posicion_cruzada, "Pais")
pais_posicion_cruzada 
             Pais Defensa Delantero Mediocentro Portero Total General
1       Argentina      11         9          13       5            38
2       Australia       6         3           5       2            16
3         Belgium       7        13          12       3            35
4          Brazil       9         5           8       1            23
5        Cameroon      11         9           9       2            31
6          Canada      11         6          13       3            33
7      Costa Rica       7         4           4       1            16
8         Croatia      11         6          13       3            33
9         Denmark      10        12          13       1            36
10        Ecuador      16         9          20       4            49
11        England      10         9          11       4            34
12         France      11         7          12       1            31
13        Germany      10         8          12       3            33
14          Ghana       9         8          15       3            35
15        IR Iran      14         7          17       2            40
16          Japan      17         7          19       2            45
17 Korea Republic      13        10          14       2            39
18         Mexico      12         8          10       1            31
19        Morocco      11         7           9       1            28
20    Netherlands      12        11           7       4            34
21         Poland      14         5          16       4            39
22       Portugal      10         8          11       3            32
23        Senegal      10         5          11       2            28
24         Serbia       7         4          13       2            26
25          Spain      14        11           6       2            33
26    Switzerland       8         6          14       1            29
27        Tunisia       9         7          11       2            29
28  United States      13        12          11       2            38
29        Uruguay      11         7          18       3            39
30          Wales       9         7           6       2            24
31  Total General     323       230         353      71           977

Por último, se guardan en un archivo de Word.

doc_tablas <- read_docx() #Se crea el documento  Word


doc_tablas <- doc_tablas %>%
    body_add_par("Tabla Cruzada de posición y región", style ="heading 1") %>% #Se agrega el título
    body_add_par("") %>% # Se agrega un enter
    body_add_table(value = region_posicion_cruzada, 
                   align_table = "center", 
                   style = "table_template")%>%
    body_add_break(pos = "after") %>% #Se agrega salto de página
  
    body_add_par("Tabla Cruzada de país y posición", style ="heading 1") %>% #Se agrega el título
    body_add_par("") %>% # Se agrega un enter
    body_add_table(value = pais_posicion_cruzada, 
                   align_table = "center", 
                   style = "table_template")%>% #Se agrega la tabla
    body_add_break(pos = "after")

# Se guarda en un documento de Word

print(doc_tablas, target = "../docs/cruzadas.docx")

Tablas de estadísticas descriptivas

Se revisan las estadísticas descriptivas de las variables cuantitativas.Se utiliza la función summary().

summary(datos_limpios[var_cuant])
      Edad       Partidos_Jugados Partidos_11_inicial Minutos_jugados 
 Min.   :17.00   Min.   : 1.000   Min.   : 0.000      Min.   :   1.0  
 1st Qu.:24.00   1st Qu.: 2.000   1st Qu.: 1.000      1st Qu.:  90.0  
 Median :26.00   Median : 4.000   Median : 2.000      Median : 235.0  
 Mean   :26.59   Mean   : 5.055   Mean   : 3.635      Mean   : 327.7  
 3rd Qu.:29.00   3rd Qu.: 7.000   3rd Qu.: 6.000      3rd Qu.: 502.0  
 Max.   :38.00   Max.   :19.000   Max.   :17.000      Max.   :1522.0  
     Goles          Asistencias       Amarillas          Rojas        
 Min.   : 0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.00000  
 1st Qu.: 0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.00000  
 Median : 0.0000   Median :0.0000   Median :0.0000   Median :0.00000  
 Mean   : 0.7155   Mean   :0.4923   Mean   :0.4954   Mean   :0.01228  
 3rd Qu.: 1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:0.00000  
 Max.   :13.0000   Max.   :8.0000   Max.   :6.0000   Max.   :1.00000  
 Minutos_jugados_90 Goles_por_minuto Asistencias_por_minuto
 Min.   : 0.000     Min.   :0.0000   Min.   :0.0000        
 1st Qu.: 1.000     1st Qu.:0.0000   1st Qu.:0.0000        
 Median : 2.600     Median :0.0000   Median :0.0000        
 Mean   : 3.641     Mean   :0.2056   Mean   :0.1635        
 3rd Qu.: 5.600     3rd Qu.:0.2000   3rd Qu.:0.1400        
 Max.   :16.900     Max.   :6.4300   Max.   :9.0000        

Se crea una tabla por cada variable y se guarda en un documento de Word.

doc_tablas <- read_docx() #Se crea el documento  Word

list_descr <- lst() #Se crea una lista vacía en donde se van a ir guardando cada tabla

for (columna in var_cuant) {
  tabla_descriptiva <-summary(datos_limpios[columna]) #Se crea la tabla por cada columna
  
  tabla_descriptiva <- as.data.frame((tabla_descriptiva[,1])) #Se convierte a una data frame 
  
  colnames(tabla_descriptiva) <- c(columna) #Se cambia el nombre de las columnas
  
  assign(paste("tabla_", columna, sep = ""), as.data.frame(tabla_descriptiva)) #Se asigna a un objeto
  
  list_descr <- append(list_descr, tabla_descriptiva) #Se adjunta a la lista
  
  #Se guarda en un Word
  
  doc_tablas <- doc_tablas%>%
    body_add_par(columna, style ="heading 1") %>% #Se agrega el título
    body_add_par("") %>% # Se agrega un enter
    body_add_table(value = tabla_descriptiva, 
                   align_table = "center", 
                   style = "table_template") %>% #Se agrega la tabla
    body_add_break(pos = "after") #Se agrega salto de página
  
  
  
}

Se guarda el documento en la caperta docs.

print(doc_tablas, target = "../docs/descriptivas.docx")

Se observan algunos ejemplos de las tablas.

as.data.frame(list_descr$Goles_por_minuto)
  list_descr$Goles_por_minuto
1            Min.   :0.0000  
2            1st Qu.:0.0000  
3            Median :0.0000  
4            Mean   :0.2056  
5            3rd Qu.:0.2000  
6            Max.   :6.4300  
as.data.frame(list_descr$Goles)
   list_descr$Goles
1 Min.   : 0.0000  
2 1st Qu.: 0.0000  
3 Median : 0.0000  
4 Mean   : 0.7155  
5 3rd Qu.: 1.0000  
6 Max.   :13.0000  

Tablas agregadas por Posición

Se pueden generar tablas descriptivas de las variables agregadas por la Posicion, por ello se utiliza el operador pipe %>%.

promedio_gol <-  datos_limpios %>% #Se toma la base de datos
  group_by(Posicion) %>% # Se agrupan por la variable posición
  summarize(Promedio = mean(Goles), Mediana = median(Goles), Des_Estand = sd(Goles)) #Se crean estadísticos descriptivos por la variable goles

promedio_gol
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa        0.226       0      0.575
2 Delantero      1.64        1      2.41 
3 Mediocentro    0.705       0      1.25 
4 Portero        0           0      0    

Se crea un ciclo for para crear todas las tablas y guardarlas en un archivo de Word.

doc_tablas <- read_docx() #Se crea el documento  Word

for (var in var_cuant){ 
  
  tabla_posicion <- datos_limpios %>%
                    group_by(Posicion) %>%
                    summarize(Promedio = mean(!!sym(var)), Mediana = median(!!sym(var)), Des_Estand = sd(!!sym(var)))
  
  #!!sym(var) convierte la cadena de caracteres en un símbolo en dplyr
  
  assign(paste("tabla_posicion_", var, sep = ""), tabla_posicion) #Se crea un objeto por cada tabla
  
  #Se guarda en un Word
  
  doc_tablas <- doc_tablas %>%
    body_add_par(var, style ="heading 1") %>% #Se agrega el título
    body_add_par("") %>% # Se agrega un enter
    body_add_table(value = tabla_posicion, 
                   align_table = "center", 
                   style = "table_template") %>% #Se agrega la tabla
    body_add_break(pos = "after") #Se agrega salto de página

}

# Se guarda el documento de Word

print(doc_tablas, target = "../docs/agregadas_posicion.docx")

Se observan los resultados

for (var in var_cuant){
  print(paste0("tabla_posicion_", var))
}
[1] "tabla_posicion_Edad"
[1] "tabla_posicion_Partidos_Jugados"
[1] "tabla_posicion_Partidos_11_inicial"
[1] "tabla_posicion_Minutos_jugados"
[1] "tabla_posicion_Goles"
[1] "tabla_posicion_Asistencias"
[1] "tabla_posicion_Amarillas"
[1] "tabla_posicion_Rojas"
[1] "tabla_posicion_Minutos_jugados_90"
[1] "tabla_posicion_Goles_por_minuto"
[1] "tabla_posicion_Asistencias_por_minuto"
for (var in var_cuant){
  tabla_posicion <- get(paste0("tabla_posicion_", var)) #Convierte la cada de texto en un objeto
  print(tabla_posicion) #Imprime tabla
  print("_______________________________________") #Imprime línea de separación 
}
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa         26.9      27       3.75
2 Delantero       26.1      26       3.90
3 Mediocentro     26.1      26       3.93
4 Portero         29.6      29       3.92
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa         4.81       4       3.74
2 Delantero       4.98       4       3.63
3 Mediocentro     5.41       5       3.88
4 Portero         4.65       4       3.75
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa         3.96       3       3.61
2 Delantero       2.93       1       3.53
3 Mediocentro     3.62       2       3.65
4 Portero         4.52       4       3.86
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa         360.     302       316.
2 Delantero       269.     141       289.
3 Mediocentro     321.     224       300.
4 Portero         407.     360       340.
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa        0.226       0      0.575
2 Delantero      1.64        1      2.41 
3 Mediocentro    0.705       0      1.25 
4 Portero        0           0      0    
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa       0.341        0      0.670
2 Delantero     0.657        0      1.21 
3 Mediocentro   0.620        0      1.12 
4 Portero       0.0141       0      0.119
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa        0.573       0      0.886
2 Delantero      0.361       0      0.727
3 Mediocentro    0.575       0      0.927
4 Portero        0.183       0      0.516
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa      0.0186        0     0.135 
2 Delantero    0.00870       0     0.0930
3 Mediocentro  0.00850       0     0.0919
4 Portero      0.0141        0     0.119 
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa         3.99     3.4       3.51
2 Delantero       2.99     1.6       3.21
3 Mediocentro     3.57     2.5       3.33
4 Portero         4.52     4         3.77
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa       0.0548   0          0.195
2 Delantero     0.508    0.275      0.808
3 Mediocentro   0.188    0          0.471
4 Portero       0        0          0    
[1] "_______________________________________"
# A tibble: 4 × 4
  Posicion    Promedio Mediana Des_Estand
  <chr>          <dbl>   <dbl>      <dbl>
1 Defensa      0.130         0     0.582 
2 Delantero    0.252         0     0.662 
3 Mediocentro  0.168         0     0.330 
4 Portero      0.00704       0     0.0593
[1] "_______________________________________"

Gráficos

Variables Cualitativas

Se utilizan gráficos de barras para mostrar la distribución de las variables cualitativas.Se agrupan por Pais y se suma su frecuencia (n = ()).

pais_jugadores <- datos_limpios %>%
                  group_by(Pais)%>% #Se agrupan los datos por pais
                  summarize(Frecuencia = n()) %>% #Se cuentan los casos (n)
                  arrange(Frecuencia) #Se ordenan de menor a mayor
pais_jugadores
# A tibble: 30 × 2
   Pais        Frecuencia
   <chr>            <int>
 1 Australia           16
 2 Costa Rica          16
 3 Brazil              23
 4 Wales               24
 5 Serbia              26
 6 Morocco             28
 7 Senegal             28
 8 Switzerland         29
 9 Tunisia             29
10 Cameroon            31
# … with 20 more rows
g <- ggplot(pais_jugadores, aes(x = Frecuencia, y = reorder(Pais, desc(Frecuencia))))+
  geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) + #Identity hace conteos, se le quita la leyenda, se rellena con color azul y se le da un ancho de 0.8
  geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) + # Se agrega el valor de la columna el final de la barra y se ajusta (hjust, vjust), el tamaño de las barras es de 3
  labs(title = "Cantidad de jugadores por país", x = "Pais", y = "Cantidad de Jugadores")+ #Títulos y nombres de los ejes x,y
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) + #Se configura el caption
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/pais_barplot.png", width = 8, height = 6, dpi = 300)

Se grafica la variable Región.

region_jugadores <- datos_limpios %>%
                  group_by(Region)%>%
                  summarize(Frecuencia = n()) %>%
                  arrange(Frecuencia)
region_jugadores
# A tibble: 5 × 2
  Region   Frecuencia
  <chr>         <int>
1 CONCACAF        118
2 AFC             140
3 CONMEBOL        149
4 CAF             151
5 UEFA            419
ggplot(region_jugadores, aes(x = Frecuencia, y = reorder(Region, desc(Frecuencia))))+
  geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
  geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) +
  labs(title = "Cantidad de jugadores por Región", x = "Region", y = "Cantidad de Jugadores")+
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/region_barplot.png", width = 8, height = 6, dpi = 300)
posicion_jugadores <- datos_limpios %>%
                  group_by(Posicion)%>%
                  summarize(Frecuencia = n()) %>%
                  arrange(Frecuencia)
posicion_jugadores
# A tibble: 4 × 2
  Posicion    Frecuencia
  <chr>            <int>
1 Portero             71
2 Delantero          230
3 Defensa            323
4 Mediocentro        353
  ggplot(posicion_jugadores, aes(y = Frecuencia, x = reorder(Posicion, desc(Frecuencia))))+
  geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
  geom_text(aes(label = Frecuencia), vjust = -0.5, hjust = 0.5, size = 3) +
  labs(title = "Cantidad de jugadores por Posición", x = "Posición", y = "Cantidad de Jugadores")+
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/posicion_barplot.png", width = 8, height = 6, dpi = 300)

Variables Discretas

Se utilizan histogramas para representar la distribuciones de los valores enteros.

g <- ggplot(datos_limpios, aes(x = Edad)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) + #Histograma con lineas blancas, ancho de 1 persona por barra y relleno azul
  labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") + #Titulo y etiquetas de los ejes x, y
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) + #Solicita ir de 1 en 1 en la numeración del eje x.
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Edad, group = Posicion,fill = Posicion)) + #Se agrupa y colorea por posición
  geom_histogram(binwidth=1, color = "white") +
  facet_wrap(~ Posicion) + #Se crea una parrilla y coloca cada histograma en una columna, en este caso la posición.
  labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/edad_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Partidos_Jugados)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
  labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Partidos_Jugados, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/partidos_jugados_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Partidos_11_inicial)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
  labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Partidos_11_inicial, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/partidos_11_inicial_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Minutos_jugados)) +
  geom_histogram(fill = "steelblue", binwidth=20, color = "white") +
  labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Minutos_jugados, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=20) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/minutos_jugados_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Goles)) +
  geom_histogram(fill = "steelblue", binwidth=1, color = "white") +
  labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Goles, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/goles_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Asistencias)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
  labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Asistencias, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/asistencias_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Amarillas)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
  labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Amarillas, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/amarillas_histplot.png", width = 8, height = 6, dpi = 300)
g <- ggplot(datos_limpios, aes(x = Rojas)) +
  geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
  labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Rojas, fill = Posicion, group= Posicion)) +
  geom_histogram(color = "white", binwidth=1) +
  facet_wrap(~ Posicion) + 
  labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
  theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
  scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
  labs(caption = "Trabajo Final, Estadística Introductoria. UCR")

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/rojas_histplot.png", width = 8, height = 6, dpi = 300)

Variables Continuas

Se utilizan gráficos de densidad, para las variables continuas ya que tienen valores con decimales.

g <- ggplot(datos_limpios, aes(x = Minutos_jugados_90)) + #Se utiliza solo una variable
  geom_density(fill = "steelblue", alpha = 0.5) + #Alfa es la opacidad del color debajo de la curva
  labs(title = "Minutos Jugados en 90 minutos", x = "Minutos Jugados", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Minutos_jugados_90, group = Posicion, fill = Posicion)) +
    geom_density(alpha = 0.4) + #Indica el tipo de gráfico y la opacidad
    facet_wrap(~ Posicion) + #Se hace una regilla con las categorías de las posiciones
    scale_x_continuous(breaks = seq(min(datos_limpios$Minutos_jugados_90), max(datos_limpios$Minutos_jugados_90), 2)) + #Indica que los valores del eje x vayan de 1 a 1
    labs(title = "Minutos jugados y posición del jugador", y = "Densidad", x = "Cantidad de Minutos", caption = "Trabajo Final, Estadística Introductoria. UCR") 

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)
g <-  ggplot(datos_limpios, aes(x = Goles_por_minuto)) +
  geom_density(fill = "steelblue", alpha = 0.5) +
  labs(title = "Goles por minuto", x = "Goles", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Goles_por_minuto, group = Posicion, fill = Posicion)) +
    geom_density(alpha = 0.4) +
    facet_wrap(~ Posicion) + 
    scale_x_continuous(breaks = seq(min(datos_limpios$Goles_por_minuto), max(datos_limpios$Goles_por_minuto), 1)) +
    labs(title = "Goles por minuto y posición del jugador", y = "Densidad", x = "Cantidad de goles por minuto", caption = "Trabajo Final, Estadística Introductoria. UCR") 

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)
g <-  ggplot(datos_limpios, aes(x = Asistencias_por_minuto)) +
  geom_density(fill = "steelblue", alpha = 0.5) +
  labs(title = "Asistencias por minuto", x = "Asistencias", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")

g

ggplot(datos_limpios, aes(x = Asistencias, group = Posicion, fill = Posicion)) +
    geom_density(alpha = 0.4) +
    facet_wrap(~ Posicion) + 
    scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias_por_minuto), max(datos_limpios$Asistencias_por_minuto), 1)) +
    labs(title = "Asistencias por minuto y posición del jugador", y = "Densidad", x = "Cantidad de Asistencias", caption = "Trabajo Final, Estadística Introductoria. UCR") 

Se guarda el archivo en la caperta graficos.

ggsave("../graficos/asistencias_por_minuto_densplot.png", width = 8, height = 6, dpi = 300)